package org.example.campusforum.service;

import org.example.campusforum.dto.ArticleGet;
import org.example.campusforum.dto.ArticleGetResponse;
import org.springframework.stereotype.Service;

import java.util.ArrayList;

/**
 * 文章查询服务接口
 *
 * 提供多种条件的文章查询功能，支持按用户ID、标题、分类ID等条件查询文章，
 * 并支持多种排序方式和分页功能。
 *
 * @author CampusForum Team
 * @version 1.0
 * @since 2024
 */
@Service
public interface ArticleGetService {

    /**
     * 根据用户ID查询文章
     *
     * 查询指定用户发布的所有文章，支持按点赞数、浏览数、评论数排序，
     * 并提供分页功能。
     *
     * @param articleGet 文章查询条件，包含用户ID、排序类型、分页信息
     * @return 文章查询响应，包含文章列表和总数
     */
    ArticleGetResponse getArticleByUserId(ArticleGet articleGet);

    /**
     * 根据标题查询文章
     *
     * 使用模糊查询方式根据文章标题搜索文章，支持多种排序方式和分页。
     *
     * @param articleGet 文章查询条件，包含标题关键词、排序类型、分页信息
     * @return 文章查询响应，包含匹配的文章列表和总数
     */
    ArticleGetResponse getArticleByTitle(ArticleGet articleGet);

    /**
     * 根据分类ID查询文章
     *
     * 查询指定分类下的所有文章，支持多种排序方式和分页功能。
     *
     * @param articleGet 文章查询条件，包含分类ID、排序类型、分页信息
     * @return 文章查询响应，包含该分类下的文章列表和总数
     */
    ArticleGetResponse getArticleByCategoryId(ArticleGet articleGet);

    /**
     * 根据标题和分类ID查询文章
     *
     * 在指定分类下使用标题关键词搜索文章，支持多种排序方式和分页功能。
     *
     * @param articleGet 文章查询条件，包含标题关键词、分类ID、排序类型、分页信息
     * @return 文章查询响应，包含匹配条件的文章列表和总数
     */
    ArticleGetResponse getArticleByTitleAndCategoryId(ArticleGet articleGet);
}
